// 定义表结构和表操作方法
var Mongoose = require('mongoose');
var Schema = Mongoose.Schema;
var ObjectId = Mongoose.SchemaTypes.ObjectId;

var MovieSchema = new Mongoose.Schema({
  director: String,
  category: {
    type: ObjectId,
    ref: 'Category'
  },
  title: String,
  language: String,
  country: String,
  summary: String,
  flash: String,
  poster: String,
  year: Number,
  pv: { // - 访客统计
    type: Number,
    default: 0
  },
  meta: {
    createAt: {
      type: Date,
      default: Date.now()
    },
    updateAt: {
      type: Date,
      default: Date.now()
    }
  }
});

// 存储数据之前调用的方法
MovieSchema.pre('save', function (next) {
  // 存储新数据同时更新元数据的建立时间和更新时间
  if (this.isNew) {
    this.meta.createAt = this.meta.updateAt = Date.now();
  // 存储已有数据只需更新元数据的更新时间即可
  } else {
    this.meta.updateAt = Date.now();
  }
  // 继续存储流程
  next();
});

// 表需要实例化后才具有的方法
MovieSchema.statics = {
  // 查询所有电影按照更新时间排序并执行回调
  fetch: function(cb) {
    return this
      .find({})
      .sort('meta.updateAt')
      .exec(cb);
  },
  // 根据ID查询电影并执行回调
  findById: function (id, cb) {
    return this
      .findOne({_id: id})
      .exec(cb);
  }
};

module.exports = MovieSchema;
